import os
import glob
from typing import List, Dict


def clean_files(target_dir: str, extensions: List[str]) -> None:
    """
    清理指定目录下的特定类型文件（保留目录）
    :param target_dir: 目标目录路径（相对于脚本运行目录）
    :param extensions: 需要清理的文件扩展名列表（如['.jpg', '.log']）
    """
    if not os.path.isdir(target_dir):
        print(f"警告：目录不存在或不是有效目录，跳过清理: {target_dir}")
        return

    for ext in extensions:
        # 构建文件匹配模式（例如：air/TC000000_Crash_debugging.air/log/*.jpg）
        file_pattern = os.path.join(target_dir, f"*{ext}")
        files_to_delete = glob.glob(file_pattern)

        if not files_to_delete:
            print(f"提示：{target_dir} 目录下未找到{ext}文件")
            continue

        for file_path in files_to_delete:
            if os.path.isfile(file_path):
                try:
                    os.remove(file_path)
                    print(f"已删除文件: {file_path}")
                except Exception as e:
                    print(f"删除失败 {file_path}: {str(e)}")


# 配置需要清理的目录和对应的文件类型（键：目录路径，值：扩展名列表）
# 注意：路径基于clean.py所在的UGC_UI目录
clean_config: Dict[str, List[str]] = {
    # air模块：所有.air测试用例的log目录（如 air/TC000000_Crash_debugging.air/log）
    "air/*/log": [".jpg", ".txt", "mp4"],
    # air模块：所有.air测试用例的text_log目录（如 air/TC000000_Crash_debugging.air/text_log）
    "air/*/text_log": [".log"],
    # air模块：所有.air测试用例的text_log目录（如 air/TC000000_Crash_debugging.air/report）
    "air/*/report": [".html"],

    # conf模块：claim_screenshot目录
    "conf/claim_screenshot": [".png"],
    # conf模块：reports目录
    "conf/reports": [".png"],

    # reports模块:baseline目录
    "reports/baseline": [".png"],
    # reports模块:case_screenshot目录
    "reports/case_screenshot": [".png"],
    # reports模块:cleanup_screenshots目录
    "reports/cleanup_screenshots": [".png"],
    # reports模块:crash_logs目录
    "reports/crash_logs": [".png"],
    # reports模块:html_reports目录
    "reports/html_reports": [".html"],
    # reports模块:logcat_logs目录
    "reports/logcat_logs": [".log"],
    # reports模块:script_logs目录
    "reports/script_logs": [".log"],
    # reports模块:performance_reports目录
    "reports/performance_reports": [".html"],
    # reports模块:summary_reports目录
    "reports/summary_reports": [".html"],
    # reports模块:screen_recordings目录
    "reports/screen_recordings":[".mp4"],


    # testcase模块
    "testcase": [".log"]
}

if __name__ == "__main__":
    print("开始清理项目文件...\n")

    for dir_pattern, exts in clean_config.items():
        # 解析带通配符的目录模式（如 air/*/log 会匹配所有.air测试用例的log目录）
        matched_dirs = glob.glob(dir_pattern)

        if not matched_dirs:
            print(f"提示：未匹配到目录模式 '{dir_pattern}'，请检查路径配置\n")
            continue

        for target_dir in matched_dirs:
            print(f"正在处理目录: {target_dir}")
            clean_files(target_dir, exts)
            print()  # 空行分隔不同目录的输出

    print("清理完成！所有目标文件已删除，目录结构保持完整。")
